TCP pomoci synapse

Otázka od: Petr Daricek

7. 1. 2004 16:04

Muze mi nekdo poradit jak se nastavuji IP adresy a Porty v synapsi?
Mam nasledujici proceduru, ktera by mela naslouchat na prislusnem portu:

procedure TTCPDaemon.Execute;
var ClientSock:TSocket;

begin
  with sock do
    begin
      CreateSocket;
      setLinger(true,10); //Nastavi jak dlouho bude system cekat na zaslana
data
      bind(FIP,FPortListen); //Vytvori a pripoji socket na IP a Port
      if getlasterror<>0 then beep;
      listen; //Nastavi socket do recieve modu
      repeat
        if terminated then break;
        if canread(1000) then
          begin
            ClientSock:=accept;
            if lastError=0 then
            Begin
              ServerTCP.Socket:=ClientSock;
              ServerTCP.Now.SetEvent;
            End;
          end;
      until false;
    end;
end;

Jakou adresu mam dat do FIP pokud chci abych odchytil vsechny zpravy ktere
prijdou na FPortListenPort?

                      Za odpovedi dekuji
____________________________________________________________
Licitovat nejvyhodnejsi nabidku je postavene na hlavu! Skoda Octavia nyni se
zvyhodnenim az 90.000 Kc!
http://ad2.seznam.cz/redir.cgi?instance=68740%26url=http://www.skoda-
auto.cz/action/fast

Odpovedá: Petr Daricek

8. 1. 2004 16:54

Diky za predeslou odpoved,
  ted mam jiny problem. Mam dva programy server a client. Client posila serveru
data a ceka na odpoved. Vsechny data od clienta k serveru dorazi v poradku, ale
nekdy se stane ze opacne server nemuze navazat spojeni (Connection Refused).
Asi delam neco blbe.  
  A jeste neexistuje nahodou dokumentace pro synapsi v cestine? Urychlilo by mi
to praci.

   Metoda Serveru, ktera odpovida


procedure TTCPDeamonThrd.Accept(Data: widestring);
var nsock:TTCPBlockSocket;
    MS:TMemoryStream;
begin
  BasicRecive.Load(data);
  nsock:=TTCPBlockSocket.Create;
  try
// nsock.Connect(FIP,FPortAnswer);
// if nsock.lasterror = 0 then
    begin
      MS:=BasicRecive.Accept;
      try
        MS.Position:=0;
        nsock.Connect(FIP,FPortAnswer);
        if nsock.lasterror = 0 then
          nsock.SendBuffer(MS.Memory,MS.Size)
        else MessageDlg(nsock.GetErrorDesc(nsock.LastError), mtWarning, [mbOK],
0);
      finally
        MS.Free;
      end;
    end; //else MessageDlg(nsock.GetErrorDesc(nsock.LastError), mtWarning,
[mbOK], 0);
  finally
    nsock.Free;
  End;
end;

Metoda Clienta

function TClientTCP.Answer:TMemoryStream;
var sock,sock2:TTCPBlockSocket;
    ClientSock:TSocket;
    Len:^int64;
    Temp:pointer;
begin
  Result:=nil;
  Len:=nil;
  sock:=TTCPBlockSocket.create;
  try
  new(Len);
  with sock do
    begin
      CreateSocket;
      setLinger(true,10); //Nastavi jak dlouho bude system cekat na zaslana
data
      bind(IP,ListenPort); //Vytvori a pripoji socket na IP a Port
      listen; //Nastavi socket do recieve modu
      repeat
        if canread(1000) then //Vraci true jestlize mohou by ze socketu nejaka
cteny data nebo
          begin
            ClientSock:=accept;
            if lastError=0 then
            Begin
              sock2:=TTCPBlockSocket.Create;
              sock2.Socket:=Clientsock;
              sock2.GetSins;
              with sock2 do
              begin
                RecvBufferEx(Len,sizeof(int64),60000);
                if LastError<>0 then continue;
                if Len^=0 then break;//Neni co nacitat
                getmem(temp,Len^);
                try
                  RecvBufferEX(temp,Len^,60000);
                  if LastError<>0 then continue;
                  Result:=TMemoryStream.Create;
                  Result.Write(Temp^,Len^);
                finally
                  freemem(temp);
                end;
                Result.Position:=0;
              end;
              break;
            end;
          end;
      until false;
    end;
  finally
    sock.Free;
    dispose(Len);
  end;
end;


Za jakekoli pripominky predem dekuji Petr Daricek

================= Puvodni zprava =================
Od (From): "Lukas Gebauer" <gebylist@mlp.cz>
Komu (To): delphi-l@clexpert.cz
Kopie (Cc):
Predmet (Subject): Re: TCP pomoci synapse
Datum (Date): 8. 1. 2004 10:58
==================================================

> > Muze mi nekdo poradit jak se nastavuji IP adresy a Porty v synapsi?
> > Mam nasledujici proceduru, ktera by mela naslouchat na prislusnem
> > portu:
> [...]
> > Jakou adresu mam dat do FIP pokud chci abych odchytil vsechny zpravy
> > ktere prijdou na FPortListenPort?
>
> Viz, dokumentace, nebo Echo Demo...
>
> Pokud chces poslouchat na vsech IP adresach, ktere tvuj pocitac ma,
> pak pouzij IP '0.0.0.0'. Pokud chces poslouchat na vsech IPv6
> adresach, pak pouzij adresu '::0'.
>
> Poslouchat na vsech IPv4 a IPv6 adresach soucasne nejde, musis mit
> dva naslouchaci sockety pro kazdy protokol zvlast. (ale thread na
> obsluhu klienta je pak uz totozny.  
>
> Pokud bys chtel poslouchat jen na urcite IP adrese (misto na vsech),
> pak misto techto univerzalnicvh adres pouzijes tu adresu, na ktere
> chces poslouchat.
>
>
> --
> Lukas Gebauer.
>
> E-mail: gebauerl@mlp.cz
> http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.
>
>
>

____________________________________________________________
SonyEricsson T230 jiz od 1977Kc. Dost dobry duvod dat svemu staremu telefonu
kosem! http://ad2.seznam.cz/redir.cgi?instance=68588%26url=http://www.oskar.cz